package com.example.ovulationperiodtracker.utils;

import java.time.LocalDate;
import java.time.Period;
import java.util.List;

public class CycleAverageCalculator {
    // 计算前n个周期的平均天数
    public static int calculateAverageDays(List<LocalDate> allJingStart, List<LocalDate> allJingEnd, int cycleCount) {
        // 验证两个集合大小是否一致
        if (allJingStart.size() != allJingEnd.size()) {
            throw new IllegalArgumentException("开始日期和结束日期的数量必须一致");
        }

        // 确定实际要计算的周期数（不超过集合大小）
        int actualCount = Math.min(cycleCount, allJingStart.size());

        int totalDays = 0;
        int validCycles = 0;

        // 遍历前actualCount个周期（由于集合已按时间降序排列，直接取前n个即可）
        for (int i = 0; i < actualCount; i++) {
            LocalDate start = allJingStart.get(i);
            LocalDate end = allJingEnd.get(i);

            // 确保开始日期不晚于结束日期
            if (start.isBefore(end) || start.isEqual(end)) {
                // 计算周期天数（包含首尾两天）
                int days = Period.between(start, end).getDays() + 1;

                // 只统计正数天数
                if (days > 0) {
                    totalDays += days;
                    validCycles++;
                }
            }
        }

        // 计算平均值（如果没有有效周期，返回0）
        return validCycles > 0 ? (int) ((double) totalDays / validCycles) : 0;
    }


}
